#ifndef _LCD_CONFIG_H_
#define _LCD_CONFIG_H_
#ifdef __cplusplus
extern "C"
{
#endif

#include "board.h"

//------------------------- 参数定义 ------------------------------
#define LCD_OFFSET_X 26 // 列偏移 COL X
#define LCD_OFFSET_Y 1  // 行偏移 ROW Y
#define LCD_SIZE_X   80
#define LCD_SIZE_Y   160

// 颜色位数
// 1 - 单色
// 8 - 323RGB
// 16 - 565RGB
// 32 - 8888ARGB
// 仅 16 通过测试
#define LCD_COLOR_BITS 16
#if LCD_COLOR_BITS == 16
// 1：高低字节颠倒，通常使用 8bit SPI 接口的LCD需要设置为1.
#define LCD_COLOR_16_SWAP 1
#endif

// 初始化后的屏幕背景颜色
#define LCD_BG_COLOR 0 // RGB颜色

// 1：显示开机LOGO，仅支持单色位图数据，从左到右逐行扫描，左侧高位。
#define LCD_SHOW_LOGO   0
#define LCD_LOGO_TIME   2000 // LOGO显示时间ms（此时间死等阻塞）
#define LCD_LOGO_SIZE_X 64
#define LCD_LOGO_SIZE_Y 64
#define LCD_LOGO_COLOR  0XFFFFFF // RGB颜色
#define LCD_LOGO_ICLUDE "const_img.h"
#define LCD_LOGO_BUFF   StartupLogo

// 定义表示启用一些LCD基本操作的API，比如显示字符、画线、画圆等。
#define LCD_USE_OPT_API
    // #define LCD_USE_CH_CHAR // 定义表示支持中文字符

// 定义表示使用自定义LCD初始化函数(被 Lcd_Init 调用)，不定义将使用内置的对应IC默认的初始化函数
// #define LCD_USE_CUSTOM_INIT_FUNC

// 需要实现的外部接口

// 端口初始化，将在 Lcd_Init 里最先被调用
// void _Lcd_PortInit()
#define _Lcd_PortInit()               // 已在 Board_Init 中统一初始化 

// 设置RST（复位）端口输出电平，某些LCD可能不需要
// void _Lcd_SetRstLevel(bool level)
#define _Lcd_SetRstLevel(level) LCD_RST_PIN_OUT = level

// 设置RS（命令/数据）端口输出电平
// void _Lcd_SetRsLevel(level)
#define _Lcd_SetRsLevel(level) LCD_DC_PIN_OUT = level // Board_SetLcdRsLevel(level)

// 背光开，如果自行控制背光，可以留空。
#define _Lcd_BkLightOn() LCD_BG_ON

// 背光关，如果自行控制背光，可以留空。
#define _Lcd_BkLightOff() LCD_BG_OFF

// 数据端口写数据，注意需要处理片选端口，可以是异步处理 // {Spi_StartTrans(NULL, data_ptr, len);while(Spi_IsBusy());}
// void _Lcd_PortWrite(u8 *data_ptr, u32 len)
#define _Lcd_PortWrite(data_ptr, len) \
{   \
    Board_StartLcdSpiCs();  \
    Board_LcdSpiSend(data_ptr, len);    \
    Board_StopLcdSpiCs();   \
}

// 端口查忙。返回true表示数据端口繁忙。如果是同步通信，设置为false。
// bool _Lcd_PortBusy()
#define _Lcd_PortBusy() false // Spi_IsBusy()

// 毫秒级延时，仅在 Lcd_Init 中被调用
// void _Lcd_Delayms(u16 ms)
#define _Lcd_Delayms(ms) Delay_ms(ms)

#ifdef LCD_USE_CUSTOM_INIT_FUNC
#define _Lcd_ChipInit()
#endif

#ifdef __cplusplus
}
#endif
#endif
